這篇文章我想誠實面對自己,也勇敢地說出來。
對。我不知道要寫什麼了... 我已經把該怎麼新建本地數據庫跟 push 到 GitHub 上都闡述完了(畢竟人家開發 git 也才花 10 天,我還想寫到 30 天)。
焦慮著該怎麼面對剩下的 11 天(加上今天)、反覆上網搜尋有關 git 的一些資料,想要從茫茫大海中撈一點有用、有趣的東西來寫,最後我決定!接下來的日子我會介紹一些「不知道也不會死的 git 相關功能」
因為前面 19 天講的內容已經足夠進行版本控制了,所以接下來就讓我們來看一些 git 很酷的功能吧!
那麼,就從 tag 開始。
tag,顧名思義就是標籤。
為什麼需要對版本貼上標籤?因為這樣才能更快的找到重要的版本,像是你在下載軟體時會看到 v1.0.4
這個東西就是所謂的 tag!
這樣聽起來,tag 跟 branch 不是很像嗎?因此我查找了資料,看到【冷知識】標籤跟分支有什麼不一樣?這篇文章來做以下解釋。
首先,這兩個東西都一樣放在 .git/refs
目錄下,只是 branch 是在 heads 目錄,tag 則是在 tags 目錄。
甚至連他們的內碼都長很像,都一樣是 SHA-1 碼:
$ cat .git/refs/heads/master
db3bbec63301d1c638e828c9a38a29314c8a0c44
$ cat .git/refs/tags/big_cats
552a844022bad7f24c5e6e3b0fc2528c8ec86df7
那他們到底差在哪?
最大的差別是「branch 會隨著 Commit 而移動,但 tag 不會」。
當 Git 往前推進一個 Commit 的時候,它所在的 branch 會跟著往前移動。但 tag 一旦貼上去之後,不管 Commit 怎麼前進,tag 還是留在原來貼的位置上。
而 tag 有兩種,一種是輕量級的標籤(lightweight tag),另一種是有附註解的標籤(annotated tag),以下為 git 官方對這兩種 tag 的解釋:
Annotated tags are meant for release while lightweight tags are meant for private or temporary object labels.
lightweight tag 可以把它想成是一張標籤紙貼上去就好那麼的簡單!
首先,先查詢目前 commit 的 SHA-1 碼,確認想要貼到哪個 commit 上
git log --oneline
接下來,使用以下語法就可以貼上 tag 了。
後面的 <commit_SHA-1>
也可以忽略不打,這樣的話是直接貼到最新的 commit 上。
git tag <tag_name> <commit_SHA-1>
而 annotated tag 跟 lightweight tag 最大的差異就是 annotated tag 可以添加訊息作為註解,而創建的方式和 lightweight tag 也只差一點點而已。
git tag <tag_name> <commit_SHA-1> -a -m "message"
-a
就是讓 git 知道你要創建的 tag 是 annotated tag,-m
就跟 commit 輸入訊息一樣。
創建完成後,想要查看已經存在的 tag 該怎麼做呢?
只要直接輸入以下指令,就會一次列出所有 tag 囉!
git tag
倘若只想看到 1.8.5 系列的標籤,你可以執行以下指令
git tag -l "v1.8.5*"
Git 基礎 - 標籤
為你自己學 git-使用標籤
【冷知識】標籤跟分支有什麼不一樣?